#ifndef INSTRUCTOR_H_
#define INSTRUCTOR_H_

#include <iostream>
#include <sstream>
#include <glibmm-2.4/glibmm.h>
#include <gtkmm-2.4/gtkmm/main.h>
#include "Usuario.h"
#include "EmisorDeFrames.h"
#include "Instructor.h"
#include "Microfono.h"

class Instructor : public Usuario {
private:
    // Cursos creados por el usuario
    std::map<unsigned int, std::list<unsigned int> > cursos;
    // Clases creadas por el usuario
    std::list<unsigned int> clases;
    // Cursos finalizados por el usuario
    std::map<unsigned int, std::list<unsigned int> > cursosFinalizados;
	// Clases finalizadas
    std::list<unsigned int> clasesFinalizadas;
	bool en_clase;
	bool en_pausa;
	std::string clase_enAccion;
	std::string curso_enAccion;
	EmisorDeFrames *emisorDeVideo;
	Microfono* microfono;

public:
	Instructor(char* ip_serv, char* puerto, char* puerto_av);
	int crearCurso(std::string codCurso, std::string Descripcion, std::string Periodo);
	int anadirClase(std::string codCurso, std::string codClase,
			std::string descripcion, std::string clave, bool disponible);
	int crearClase(std::string codClase, std::string descripcion, std::string clave, bool disponible);
	int iniciarClase(std::string codCursos, std::string codClase);
	int pausarClase();
	int terminarClase();
	int continuarClase();
	bool esta_en_clase();
	bool buscarClase(unsigned int cod_Clase);
	bool buscarCurso(unsigned int cod_Curso);
	bool buscarClaseDeCurso(unsigned int cod_Curso, unsigned int cod_Clase);
	bool buscarClaseTerminada(unsigned int cod_Clase);
	bool buscarClaseDeCursoTerminada(unsigned int cod_Curso, unsigned int cod_Clase);
	std::string getClase_EnAccion();
	int adjuntar(std::string directorio, std::string codigoClase, std::string codigoCurso);
	virtual ~Instructor();
	void crear_hilos_de_recepcion();
	unsigned int String_toInt(std::string str);
};

#endif
